package com.culturalCenter.dataCenter.mapper.activity;

import com.culturalCenter.dataCenter.customEntity.CustomServicedNumber;
import com.culturalCenter.dataCenter.customEntity.CustomServicedNumberList;
import com.culturalCenter.dataCenter.customEntity.ServicedNumber;
import com.culturalCenter.dataCenter.customEntity.activity.CustomActivityList;
import com.culturalCenter.dataCenter.customEntity.activity.CustomActivityRoundTime;
import com.culturalCenter.dataCenter.customEntity.activity.CustomActivitySmartScreen;
import com.culturalCenter.dataCenter.customEntity.activity.CustomActivityTodayFinish;
import com.culturalCenter.dataCenter.customEntity.training.CustomParticipationRateRank;
import com.culturalCenter.dataCenter.customEntity.user.CustomListUser;
import com.culturalCenter.dataCenter.entity.PaiQiResult;
import com.culturalCenter.dataCenter.entity.activity.Activity;
import com.culturalCenter.dataCenter.entity.activity.ActivityHost;
import com.culturalCenter.dataCenter.entity.activity.ActivityTodayCount;
import com.culturalCenter.dataCenter.mapper.base.BaseMapper;
import com.culturalCenter.dataCenter.vo.DepartmentDataVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * 活动信息(Activity)表数据库访问层
 *
 * @author makejava
 * @since 2020-10-29 15:33:21
 */
@Mapper
public interface ActivityMapper extends BaseMapper<Activity> {

    /**
     * 通过ID查询单条数据
     *
     * @param activityId
     *         主键
     *
     * @return 实例对象
     */
    Activity queryById(@Param("activityId") String activityId);

    /**
     * 查询指定行数据
     *
     * @param offset
     *         查询起始位置
     * @param limit
     *         查询条数
     *
     * @return 对象列表
     */
    List<Activity> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 分页查询所有数据
     *
     * @return 对象列表
     */
    List<Activity> findPageAll();

    /**
     * 通过实体作为筛选条件查询
     *
     * @param activity
     *         实例对象
     *
     * @return 对象列表
     */
    List<Activity> queryAll(Activity activity);

    /**
     * 新增数据
     *
     * @param activity
     *         实例对象
     *
     * @return 影响行数
     */
    int insert(Activity activity);

    /**
     * 选择列增加
     *
     * @param activity
     *         实例对象
     *
     * @return 影响行数
     */
    int insertSelective(Activity activity);

    /**
     * 修改数据
     *
     * @param activity
     *         实例对象
     *
     * @return 影响行数
     */
    int update(Activity activity);

    /**
     * 通过主键删除数据
     *
     * @param id
     *         主键
     *
     * @return 影响行数
     */
    int deleteById(@Param("id") String id);

    /**
     * 获取活动左侧列表
     *
     * @param activityName
     * @param status
     *
     * @return
     */
    List<CustomActivityList> getAllActivity(@Param("activityName") String activityName, @Param("status") Integer status, @Param("branchId") String branchId);

    /**
     * 获取活动基本信息
     *
     * @param activityId
     *
     * @return
     */
    Activity queryInfoByActivityId(@Param("activityId") String activityId);

    /**
     * 查询时间线
     *
     * @param activityId
     *
     * @return
     */
    Activity queryTimeById(@Param("activityId") String activityId);

    /**
     * 活动回顾
     *
     * @param activityId
     *
     * @return
     */
    List<Activity> queryReviewByActivityId(@Param("activityId") String activityId);

    /**
     * 获取活动信息
     *
     * @param activityId
     *
     * @return
     */
    List<Activity> getActivityInfo(@Param("activityId") String activityId);

    List<Activity> getAllActivityByBranchId();

    List<PaiQiResult> getActivityScreenInfoBySiteCode(@Param("siteCode") String siteCode, @Param("date") String date);

    List<Activity> getActivityByStatus();

    /**
     * 年度参与率排行
     *
     * @param branchId
     *
     * @return
     */
    List<CustomParticipationRateRank> selectParticipationRateRank(@Param("startDate") String startDate,@Param("endDate") String endDate,@Param("branchId") String branchId);

    /**
     * 活动分类年度参与率排行
     *
     * @param date
     * @param branchId
     *
     * @return
     */
    List<CustomParticipationRateRank> selectClassifyParticipationRateRank(@Param("startDate") String startDate,@Param("endDate") String endDate, @Param("branchId") String branchId);

    /**
     * 根据活动id插入之前没有添加的签到开始时间、签到结束时间、活动开始时间、活动结束时间这四个字段
     *
     * @param activity
     */
    void updateSelect(Activity activity);

    /**
     * 批量插入
     *
     * @param activityList
     */
    void insertBatch(@Param("activityList") List<Activity> activityList);

    /**
     * 生成当前活动活动状态
     *
     * @return
     */
    String countActivityStatus(@Param("id") String id);

    /**
     * 批量插入或者更新活动状态
     *
     * @param countList
     *
     * @return
     */
    int insertOrUpdateStatus(@Param("countList") List<Activity> countList);

    /**
     * 统计cdc_activity的beginTime、endTime
     *
     * @return
     */
    List<Activity> countActivityTime();

    /**
     * 批量插入活动最近场次的时间
     *
     * @param countList
     *
     * @return
     */
    int insertBatchActivityTime(@Param("countList") List<Activity> countList);

    /**
     * 清空表
     *
     * @return
     */
    int clearTable();

    /**
     * 今日举办活动数
     *
     * @param date
     *
     * @return
     */
    CustomActivityTodayFinish queryTodayFinishActivity(@Param("date") String date);

    List<String> selectActivityPicture(@Param("branchId") String branchId);

    /**
     * 导航屏
     *
     * @param branchId
     *
     * @return
     */
    List<Activity> getNavigationScreen(@Param("branchId") String branchId);

    /**
     * 获得面向人群
     *
     * @param branchId
     *
     * @return
     */
    List<String> getCrowd(@Param("branchId") String branchId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 根据服务人群获得活动数
     *
     * @param crowd
     *
     * @return
     */
    Integer getNumByCrowd(@Param("branchId") String branchId, @Param("crowd") String crowd, @Param("startDate") String startDate, @Param("endDate") String endDate);

    List<String> getArt(@Param("branchId") String branchId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    Integer getNumByArt(@Param("branchId") String branchId, @Param("art") String art, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取活动类型类别
     *
     * @param branchId
     * @param startDate
     * @param endDate
     *
     * @return
     */
    List<String> getActivityTypeList(@Param("branchId") String branchId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    Integer getNumByActivityType(@Param("activityType") String activityType, @Param("branchId") String branchId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获得本月活动资讯
     *
     * @param branchId
     *
     * @return
     */
    List<CustomActivitySmartScreen> getActivitiesTheMonth(@Param("branchId") String branchId);

    /**
     * 获得下月活动预告
     *
     * @param branchId
     *
     * @return
     */
    List<CustomActivitySmartScreen> getActivitiesNextMonth(@Param("branchId") String branchId);

    /**
     * 获取场次时间
     *
     * @param id
     *
     * @return
     */
    List<CustomActivityRoundTime> getRoundTimeById(@Param("id") String id);

    /**
     * 获得该馆近一年活动场次
     *
     * @param branchId
     *
     * @return
     */
    Integer getEvents(@Param("branchId") String branchId);

    /**
     * 获得该馆近一年培训场次
     *
     * @param branchId
     *
     * @return
     */
    Integer getTrainings(@Param("branchId") String branchId);

    /**
     * 获得该馆近一年发布的文化咨询
     *
     * @param branchId
     *
     * @return
     */
    Integer getInformation(@Param("branchId") String branchId);

    /**
     * 获得该馆近一年服务人次
     *
     * @param branchId
     *
     * @return
     */
    Integer getServiceVisits(@Param("branchId") String branchId);

    /**
     * 获得注册用户量
     *
     * @param branchId
     *
     * @return
     */
    Integer setRegisteredUsers(@Param("branchId") String branchId);

    /**
     * 获得该馆文化志愿者数量
     *
     * @param branchId
     *
     * @return
     */
    Integer getVolunteers(@Param("branchId") String branchId);

    /**
     * 获得该馆该日的服务人数
     *
     * @param branchId
     * @param offsetDate
     *
     * @return
     */
    CustomServicedNumberList getServicedNumberList(@Param("branchId") String branchId, @Param("offsetDate") Date offsetDate);

    /**
     * 获得该馆日期范围内的服务人次统计
     *
     * @param branchId
     * @param startDay
     * @param endDay
     *
     * @return
     */
    CustomServicedNumber getServicedNumber(@Param("branchId") String branchId, @Param("startDay") Date startDay, @Param("endDay") Date endDay);

    /**
     * 获得该馆最早举办活动的日期
     *
     * @param branchId
     *
     * @return
     */
    LocalDateTime getEarliestDate(@Param("branchId") String branchId);

    /**
     * 得到场馆的有场次的日期
     *
     * @return
     */
    List<ServicedNumber> getBranchDays(@Param("today") String today);

    /**
     * 根据branchId和date获取线上服务人次
     *
     * @param branchId
     * @param date
     *
     * @return
     */
    Integer getOnlineNumberByBranchAndDay(@Param("branchId") String branchId, @Param("date") String date);

    /**
     * 插入activityServedNumber
     *
     * @param asn
     *
     * @return
     */
    int insertActivityServedNumber(ServicedNumber asn);

    /**
     * 查是否有服务人次数据
     *
     * @return
     */
    int countServicedNumber();

    /**
     * 获取全部id
     *
     * @return
     */
    List<Activity> selectAllIds();

    /**
     * 获取该活动类型参与率最高的20个用户
     *
     * @param activityType
     *
     * @return
     */
    List<CustomListUser> getUsersByActivityType(String activityType);

    /**
     * 获取各部门名额数/报名数/录取数/签到数
     * @param startDate
     * @param endDate
     * @param branchId
     * @return
     */
    List<DepartmentDataVo> selectDepartmentData(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("branchId") String branchId);

    List<ActivityHost> selectActivityHost(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("branchId") String branchId);

    double getActivityAvgParticipationRate(@Param("branchId") String branchId);

    ActivityTodayCount activityStatusCount(@Param("branchId")String branchId);

    List<Activity> getNewNavigationScreen(@Param("branchId")String branchId);

    List<PaiQiResult> getNewActivityScreenInfoBySiteCode(@Param("siteCode") String siteCode, @Param("date") String date);
}
